home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / source_ / keepchk.s < prev    next >
Text File  |  1997-02-26  |  2KB  |  93 lines

  1. * 自分自身が常駐しているかどうか調べる
  2. *        Oh!X 1992/3    p68+ちょっと改良
  3.  
  4.     .include    doscall.mac
  5.     .include    pspdef.mac
  6. *
  7.     .xdef    keepchk
  8. *
  9.     .text
  10.     .even
  11. *
  12. keepchk:
  13. *
  14. *入力
  15. *    4(sp).l    自分自身のメモリ管理ポインタ
  16. *    8(sp).l    プログラム先頭から識別文字までのバイト数
  17. *出力
  18. *    d0.b    常駐しているかどうか
  19. *        =  0 ... 常駐していない
  20. *        = -1 ... 常駐している
  21. *    d1.b    Human68kから直接起動されたかどうか
  22. *        =  0 ... command.xなどから起動
  23. *        = -1 ... Human68kから直接起動
  24. *    a0    メモリ管理ポインタ
  25. *        d0.b =  0 ... 自分自身のメモリポインタ
  26. *        d0.b = -1 ... 見つけた常駐プロセスのメモリポインタ
  27. MYMP    =    4+4*3+4*4    * sp,d2-d4/a1-a4
  28.     movem.l    d2-d4/a1-a4,-(sp)
  29.  
  30.     movem.l    MYMP(sp),a0/a4
  31.     move.l    a0,d4            * 保存
  32.  
  33.     lea.l    PSPSIZ(a4),a4
  34.     lea.l    0(a0,a4.l),a1
  35.  
  36.     movea.l    a1,a2
  37.     moveq.l    #-1,d3
  38. lenlp:    addq.w    #1,d3
  39.     tst.b    (a2)+
  40.     bne    lenlp
  41.  
  42.     clr.l    -(sp)
  43.     DOS    _SUPER
  44.     move.l    d0,(sp)
  45.  
  46.     movea.l    MOTHER(a0),a0
  47.     move.l    MOTHER(a0),d0
  48.     seq.b    d1
  49.     beq    chk0
  50.  
  51. chklp0:    movea.l    d0,a0
  52.     move.l    MOTHER(a0),d0
  53.     bne    chklp0
  54.  
  55. chk0:    moveq.l    #-1,d2
  56.  
  57. chklp1:    cmp.b    KEEPFLAG(a0),d2
  58.     bne    chknx1
  59.  
  60.     lea.l    0(a0,a4.l),a2
  61.     adda.w    d3,a2
  62.  
  63.     cmpa.l    MEMEND(a0),a2
  64.     bcc    chknx1
  65.  
  66.     suba.w    d3,a2
  67.     movea.l    a1,a3
  68.     move.w    d3,d0
  69. cmplp:    cmpm.b    (a3)+,(a2)+
  70.     dbne    d0,cmplp
  71.     beq    found
  72.  
  73. chknx1:    move.l    NEXTMEM(a0),d0
  74.     bne    ok
  75. nfound:    movea.l    d4,a0
  76.     bra    done
  77.  
  78. ok:    movea.l    d0,a0
  79.     bra    chklp1
  80.  
  81. found:    moveq.l    #0,d2
  82. done:    tst.b    (sp)
  83.     bmi    skip
  84.     DOS    _SUPER
  85. skip:    addq.w    #4,sp
  86.     tst.b    d2
  87.     seq.b    d0
  88.  
  89.     movem.l    (sp)+,d2-d4/a1-a4
  90.     rts
  91. *
  92.     .end
  93.